Distributing large computations across a large number of computing nodes has become increasingly popular. Distributing such large computations allows for complex problems to be solved that might otherwise be beyond the processing resources of a single computing system or a small number of computing systems. Generally, a central computing system provides a portion of the large computation to each computing node. The computing nodes in turn perform the portions they have been assigned and return the results to the central computing system. The central computing system may then process the various results from the computing nodes to determine the overall solution to the large computation.
One common approach is to distribute portions of a large computation to volunteers taken from the general public. The volunteers allow their computers to act as computing nodes of the distributed system. Accordingly, a central computing system provides each of the volunteers' computing nodes a portion of the large computation to perform. This approach allows for the utilization of processing resources of the computing nodes when the nodes are not in use by the volunteers or when the volunteers are not utilizing the full processing resources of their computing nodes.
Although the use of volunteers from the public provides for low cost access to processing resources, there are several drawbacks. First, the computing nodes that are performing the portions of the large computation are untrusted from the perspective of the central computing system since they are volunteer nodes. Accordingly, a computing node could accidentally make a mistake as a result of introducing bugs in the program code of the problem to be solved, user error, misconfiguration of external data, or other similar circumstances. Alternatively, a computing node could attempt fraud by providing false solutions to the assigned computation or by stealing the results from another computing node and then providing those results as its own results.
Some systems provide security measures such as encryption and digital signatures in an attempt to prevent such fraud. However, such measures cannot detect certain kinds of error or sophisticated fraud. For example, an adverse party could interrupt a computation in process, change some values, and allow the computation to continue in such a way that conventional encryption and digital signatures could not detect.